// 注册、登录、退出
const express = require('express')
const User = require('../models/user')
const Topic = require('../models/topic')

const router = express.Router()

router.get('/', (req, res, next) => {
    // 查找所有的文章
    Topic.find((err, data) => {
        if(err){
            return next(err)
        }
        // 处理时间字符串
        data.forEach(item => {
            console.log(item.updated_time)
        })
        res.render('index.html', {
            user: req.session.user,
            topics: data.reverse()
        })
    })
    
})

router.get('/login', (req, res) => {
    res.render('login.html')
})

router.post('/login', (req, res, next) => {
    const { email, password } = req.body
    User.findOne({
        email,
        password
    }, (err, user) => {
        if (err) {
            /* return res.status(500).json({
                err_code: 500,
                msg: err.message
            }) */
            return next(err)
        }

        if (!user) {
            return res.status(200).json({
                err_code: 1,
                msg: 'email or password is invalid'
            })
        }

        // 用户存在，登录成功，通过session记录登录状态
        req.session.user = user
        return res.status(200).json({
            err_code: 0,
            msg: 'ok'
        })
    })
})

router.get('/register', (req, res) => {
    res.render('register.html')
})

router.post('/register', (req, res, next) => {
    // 1、获取post表单数据
    // 2、操作mongodb数据库
    // 3、发送响应
    const { email, nickname, password } = req.body
    User.findOne({
        $or: [
            { email }, { nickname }
        ]
    }, (err, data) => {
        if (err) {
            return next(err)
        }
        if (data) {
            return res.status(200).json({
                err_code: 1,
                msg: '邮箱或昵称已存在'
            })
        }

        new User(req.body).save((err, user) => {
            if (err) {
                return next(err)
            }
            // res.status(20).send('ok')
            // Express 提供了一个方法：json(), 参数是一个对象，会自动将对象转换成字符串发送给客户端
            console.log('ok')
            res.status(200).json({
                err_code: 0,
                msg: 'ok'
            })
        })
    })
})

router.get('/logout', (req, res) => {
    // 清空登录状态
    delete req.session.user
    // 重定向到登录页
    res.redirect('/login')
})

router.get('/settings/profile', (req, res) => {
    res.render('settings/profile.html', {
        user: req.session.user
    })
})

router.post('/settings/profile', async (req, res, next) => {
    const { email } = req.session.user
    //findOneAndUpdate（）默认返回原始的数据
    //其中{ email }按email=email进行查询
    //其中{ new: true }，需要将new属性设置为true，返回更新后的数据
    const data = await User.findOneAndUpdate({ email }, { $set: req.body }, { new: true })
    if(!data){
        return next(err)
    }
    req.session.user = data
    res.status(200).json({
        err_code: 0,
        msg: 'ok'
    })
    // 异步请求，服务器不能进行重定向
})

router.get('/settings/admin', (req, res) => {
    res.render('settings/admin.html', {
        user: req.session.user
    })
})

router.post('/settings/admin', async (req, res, next) => {
    const { email, password } = req.session.user
    //findOneAndUpdate（）默认返回原始的数据
    //其中{ email }按email=email进行查询
    //其中{ new: true }，需要将new属性设置为true，返回更新后的数据
    const data = await User.findOneAndUpdate({ email, password }, { password: req.body.newPassword }, { new: true })
    if(!data){
        return next('服务器出错')
    }
    req.session.user = data
    res.status(200).json({
        err_code: 0,
        msg: 'ok'
    })
})

router.delete('/settings/admin', (req, res, next) => {
    const { email } = req.session.user
    User.findOneAndRemove({ email }, (err, data) => {
        if(err){
            return next(err)
        }
        delete req.session.user
        res.status(200).json({
            err_code: 0,
            msg: 'ok'
        })
    })
    
})
// 暴露路由
module.exports = router